iT邦幫忙

5

[MS SQL] SQL 效能改善 - 不要在where用function

  • 分享至 

  • xImage
  •  

撈很久居然是因為在變數裡用funtion

select *
from 
	CUST t2 with (nolock) 
and BirthDate between dbo.YYYYMMDDtoCYMMDD (convert(varchar, getdate(), 112))-5 and dbo.YYYYMMDDtoCYMMDD (convert(varchar, getdate(), 112))

#這樣就解決了

declare @msDate int 
declare @meDate int 
set @msDate = dbo.YYYYMMDDtoCYMMDD (convert(varchar, getdate(), 112))-5
set @meDate = dbo.YYYYMMDDtoCYMMDD (convert(varchar, getdate(), 112))

select * 
from 
	CUST t2 with (nolock) 
where BirthDate between  @msDate and  @meDate 

如果上面的方式還是不行,可以再試試用
EXEC('select ....')


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

2
小碼農米爾
iT邦高手 1 級 ‧ 2017-11-02 19:00:47

如果 WHERE 會造成欄位轉型也會拖慢效能,
例如: A 欄位 型態是字串,但 WHERE 條件卻下 WHERE A = 1
SQL會向上轉型將所有 A 欄位 的資料轉成數字再做比對,
小弟最近遇到的問題,跟大大的例子有點像。

圓頭人 iT邦研究生 5 級 ‧ 2017-11-03 09:42:59 檢舉

謝謝fyh711426的分享,原來隱含轉型也會~

之前資料少,這樣用沒感覺
這次遇到資料量大,才感覺出差異~

我要留言

立即登入留言